Skip to content

feat: add :createMultichainAccountGroups action to batch account creation #7801

Open
ccharly wants to merge 37 commits intomainfrom
cc/feat/snap-keyring-createAccounts
Open

feat: add :createMultichainAccountGroups action to batch account creation #7801
ccharly wants to merge 37 commits intomainfrom
cc/feat/snap-keyring-createAccounts

Conversation

@ccharly
Copy link
Contributor

@ccharly ccharly commented Feb 2, 2026

Explanation

Adding batch account creation support to the AccountProvider (emulated for now for Snap account providers).

Also added :createMultichainAccountGroups action to be able to create multiple group at once.

References

N/A

Checklist

  • I've updated the test suite for new or updated code as appropriate
  • I've updated documentation (JSDoc, Markdown, etc.) for new or updated code as appropriate
  • I've communicated my changes to consumers by updating changelogs for packages I've changed
  • I've introduced breaking changes in this PR and have prepared draft pull requests for clients and consumer packages to resolve them

Note

Medium Risk
Touches core account/group creation paths and introduces new range-based/batched provider behavior (including background non-EVM creation), so regressions could impact wallet initialization or account alignment despite expanded test coverage.

Overview
Adds a new messenger action/method, MultichainAccountService:createMultichainAccountGroups, to batch-create multichain account groups over a group-index range.

Refactors MultichainAccountWallet group creation to use range-based account creation: EVM accounts are created in a single range call and groups are created/updated from that state, while non-EVM providers either run in the background (default) with warning aggregation or are fully awaited with hard-failure when waitForAllProvidersToFinishCreatingAccounts is true.

Extends EvmAccountProvider, SolAccountProvider, BtcAccountProvider, and TrxAccountProvider to support AccountCreationType.Bip44DeriveIndexRange (EVM optimized with single withKeyring + addAccounts + batched AccountsController:getAccounts), adds shared range/index validation and error-message helpers in utils.ts, and updates tests/changelog accordingly.

Written by Cursor Bugbot for commit a24ea0f. This will update automatically on new commits. Configure here.

Base automatically changed from hm/bip-44-perf-and-devx-improvements to main February 5, 2026 22:59
@ccharly ccharly force-pushed the cc/feat/snap-keyring-createAccounts branch from a52de96 to ec380f9 Compare February 6, 2026 11:52
@ccharly ccharly force-pushed the cc/feat/snap-keyring-createAccounts branch from ec380f9 to 9abe68a Compare February 10, 2026 18:50
@ccharly ccharly force-pushed the cc/feat/snap-keyring-createAccounts branch from 82c92fa to cb0e654 Compare February 11, 2026 16:07
@ccharly ccharly marked this pull request as ready for review February 11, 2026 16:47
@ccharly ccharly requested review from a team as code owners February 11, 2026 16:47
@ccharly
Copy link
Contributor Author

ccharly commented Feb 11, 2026

@metamaskbot publish-preview

@github-actions
Copy link
Contributor

Preview builds have been published. See these instructions for more information about preview builds.

Expand for full list of packages and versions.
{
  "@metamask-previews/account-tree-controller": "4.1.1-preview-8edbf7c9d",
  "@metamask-previews/accounts-controller": "36.0.0-preview-8edbf7c9d",
  "@metamask-previews/address-book-controller": "7.0.1-preview-8edbf7c9d",
  "@metamask-previews/ai-controllers": "0.0.0-preview-8edbf7c9d",
  "@metamask-previews/analytics-controller": "1.0.0-preview-8edbf7c9d",
  "@metamask-previews/analytics-data-regulation-controller": "0.0.0-preview-8edbf7c9d",
  "@metamask-previews/announcement-controller": "8.0.0-preview-8edbf7c9d",
  "@metamask-previews/app-metadata-controller": "2.0.0-preview-8edbf7c9d",
  "@metamask-previews/approval-controller": "8.0.0-preview-8edbf7c9d",
  "@metamask-previews/assets-controller": "1.0.0-preview-8edbf7c9d",
  "@metamask-previews/assets-controllers": "99.3.2-preview-8edbf7c9d",
  "@metamask-previews/base-controller": "9.0.0-preview-8edbf7c9d",
  "@metamask-previews/bridge-controller": "66.1.0-preview-8edbf7c9d",
  "@metamask-previews/bridge-status-controller": "66.0.1-preview-8edbf7c9d",
  "@metamask-previews/build-utils": "3.0.4-preview-8edbf7c9d",
  "@metamask-previews/chain-agnostic-permission": "1.4.0-preview-8edbf7c9d",
  "@metamask-previews/claims-controller": "0.4.2-preview-8edbf7c9d",
  "@metamask-previews/composable-controller": "12.0.0-preview-8edbf7c9d",
  "@metamask-previews/connectivity-controller": "0.1.0-preview-8edbf7c9d",
  "@metamask-previews/controller-utils": "11.18.0-preview-8edbf7c9d",
  "@metamask-previews/core-backend": "5.1.1-preview-8edbf7c9d",
  "@metamask-previews/delegation-controller": "2.0.1-preview-8edbf7c9d",
  "@metamask-previews/earn-controller": "11.1.0-preview-8edbf7c9d",
  "@metamask-previews/eip-5792-middleware": "2.1.0-preview-8edbf7c9d",
  "@metamask-previews/eip-7702-internal-rpc-middleware": "0.1.0-preview-8edbf7c9d",
  "@metamask-previews/eip1193-permission-middleware": "1.0.3-preview-8edbf7c9d",
  "@metamask-previews/ens-controller": "19.0.2-preview-8edbf7c9d",
  "@metamask-previews/error-reporting-service": "3.0.1-preview-8edbf7c9d",
  "@metamask-previews/eth-block-tracker": "15.0.1-preview-8edbf7c9d",
  "@metamask-previews/eth-json-rpc-middleware": "23.1.0-preview-8edbf7c9d",
  "@metamask-previews/eth-json-rpc-provider": "6.0.0-preview-8edbf7c9d",
  "@metamask-previews/foundryup": "1.0.1-preview-8edbf7c9d",
  "@metamask-previews/gas-fee-controller": "26.0.2-preview-8edbf7c9d",
  "@metamask-previews/gator-permissions-controller": "1.1.2-preview-8edbf7c9d",
  "@metamask-previews/json-rpc-engine": "10.2.2-preview-8edbf7c9d",
  "@metamask-previews/json-rpc-middleware-stream": "8.0.8-preview-8edbf7c9d",
  "@metamask-previews/keyring-controller": "25.1.0-preview-8edbf7c9d",
  "@metamask-previews/logging-controller": "7.0.1-preview-8edbf7c9d",
  "@metamask-previews/message-manager": "14.1.0-preview-8edbf7c9d",
  "@metamask-previews/messenger": "0.3.0-preview-8edbf7c9d",
  "@metamask-previews/multichain-account-service": "7.0.0-preview-8edbf7c9d",
  "@metamask-previews/multichain-api-middleware": "1.2.6-preview-8edbf7c9d",
  "@metamask-previews/multichain-network-controller": "3.0.3-preview-8edbf7c9d",
  "@metamask-previews/multichain-transactions-controller": "7.0.1-preview-8edbf7c9d",
  "@metamask-previews/name-controller": "9.0.0-preview-8edbf7c9d",
  "@metamask-previews/network-controller": "29.0.0-preview-8edbf7c9d",
  "@metamask-previews/network-enablement-controller": "4.1.0-preview-8edbf7c9d",
  "@metamask-previews/notification-services-controller": "22.0.0-preview-8edbf7c9d",
  "@metamask-previews/permission-controller": "12.2.0-preview-8edbf7c9d",
  "@metamask-previews/permission-log-controller": "5.0.0-preview-8edbf7c9d",
  "@metamask-previews/perps-controller": "0.0.0-preview-8edbf7c9d",
  "@metamask-previews/phishing-controller": "16.2.0-preview-8edbf7c9d",
  "@metamask-previews/polling-controller": "16.0.2-preview-8edbf7c9d",
  "@metamask-previews/preferences-controller": "22.1.0-preview-8edbf7c9d",
  "@metamask-previews/profile-metrics-controller": "3.0.1-preview-8edbf7c9d",
  "@metamask-previews/profile-sync-controller": "27.1.0-preview-8edbf7c9d",
  "@metamask-previews/ramps-controller": "8.0.0-preview-8edbf7c9d",
  "@metamask-previews/rate-limit-controller": "7.0.0-preview-8edbf7c9d",
  "@metamask-previews/remote-feature-flag-controller": "4.0.0-preview-8edbf7c9d",
  "@metamask-previews/sample-controllers": "4.0.2-preview-8edbf7c9d",
  "@metamask-previews/seedless-onboarding-controller": "7.1.0-preview-8edbf7c9d",
  "@metamask-previews/selected-network-controller": "26.0.2-preview-8edbf7c9d",
  "@metamask-previews/shield-controller": "5.0.1-preview-8edbf7c9d",
  "@metamask-previews/signature-controller": "39.0.2-preview-8edbf7c9d",
  "@metamask-previews/storage-service": "1.0.0-preview-8edbf7c9d",
  "@metamask-previews/subscription-controller": "6.0.0-preview-8edbf7c9d",
  "@metamask-previews/transaction-controller": "62.17.0-preview-8edbf7c9d",
  "@metamask-previews/transaction-pay-controller": "12.2.0-preview-8edbf7c9d",
  "@metamask-previews/user-operation-controller": "41.0.2-preview-8edbf7c9d"
}

@ccharly
Copy link
Contributor Author

ccharly commented Mar 5, 2026

@metamaskbot publish-preview

@github-actions
Copy link
Contributor

github-actions bot commented Mar 5, 2026

Preview builds have been published. See these instructions for more information about preview builds.

Expand for full list of packages and versions.
{
  "@metamask-previews/account-tree-controller": "4.1.1-preview-8c978cc75",
  "@metamask-previews/accounts-controller": "36.0.1-preview-8c978cc75",
  "@metamask-previews/address-book-controller": "7.0.1-preview-8c978cc75",
  "@metamask-previews/ai-controllers": "0.1.0-preview-8c978cc75",
  "@metamask-previews/analytics-controller": "1.0.0-preview-8c978cc75",
  "@metamask-previews/analytics-data-regulation-controller": "0.0.0-preview-8c978cc75",
  "@metamask-previews/announcement-controller": "8.0.0-preview-8c978cc75",
  "@metamask-previews/app-metadata-controller": "2.0.0-preview-8c978cc75",
  "@metamask-previews/approval-controller": "8.0.0-preview-8c978cc75",
  "@metamask-previews/assets-controller": "2.2.0-preview-8c978cc75",
  "@metamask-previews/assets-controllers": "100.0.3-preview-8c978cc75",
  "@metamask-previews/base-controller": "9.0.0-preview-8c978cc75",
  "@metamask-previews/base-data-service": "0.0.0-preview-8c978cc75",
  "@metamask-previews/bridge-controller": "68.0.0-preview-8c978cc75",
  "@metamask-previews/bridge-status-controller": "68.0.0-preview-8c978cc75",
  "@metamask-previews/build-utils": "3.0.4-preview-8c978cc75",
  "@metamask-previews/chain-agnostic-permission": "1.4.0-preview-8c978cc75",
  "@metamask-previews/claims-controller": "0.4.2-preview-8c978cc75",
  "@metamask-previews/client-controller": "1.0.0-preview-8c978cc75",
  "@metamask-previews/compliance-controller": "1.0.1-preview-8c978cc75",
  "@metamask-previews/composable-controller": "12.0.0-preview-8c978cc75",
  "@metamask-previews/config-registry-controller": "0.0.0-preview-8c978cc75",
  "@metamask-previews/connectivity-controller": "0.1.0-preview-8c978cc75",
  "@metamask-previews/controller-utils": "11.19.0-preview-8c978cc75",
  "@metamask-previews/core-backend": "6.0.0-preview-8c978cc75",
  "@metamask-previews/delegation-controller": "2.0.1-preview-8c978cc75",
  "@metamask-previews/earn-controller": "11.1.1-preview-8c978cc75",
  "@metamask-previews/eip-5792-middleware": "3.0.0-preview-8c978cc75",
  "@metamask-previews/eip-7702-internal-rpc-middleware": "0.1.0-preview-8c978cc75",
  "@metamask-previews/eip1193-permission-middleware": "1.0.3-preview-8c978cc75",
  "@metamask-previews/ens-controller": "19.0.3-preview-8c978cc75",
  "@metamask-previews/error-reporting-service": "3.0.1-preview-8c978cc75",
  "@metamask-previews/eth-block-tracker": "15.0.1-preview-8c978cc75",
  "@metamask-previews/eth-json-rpc-middleware": "23.1.0-preview-8c978cc75",
  "@metamask-previews/eth-json-rpc-provider": "6.0.0-preview-8c978cc75",
  "@metamask-previews/foundryup": "1.0.1-preview-8c978cc75",
  "@metamask-previews/gas-fee-controller": "26.0.3-preview-8c978cc75",
  "@metamask-previews/gator-permissions-controller": "2.0.0-preview-8c978cc75",
  "@metamask-previews/geolocation-controller": "0.1.0-preview-8c978cc75",
  "@metamask-previews/json-rpc-engine": "10.2.3-preview-8c978cc75",
  "@metamask-previews/json-rpc-middleware-stream": "8.0.8-preview-8c978cc75",
  "@metamask-previews/keyring-controller": "25.1.0-preview-8c978cc75",
  "@metamask-previews/logging-controller": "7.0.1-preview-8c978cc75",
  "@metamask-previews/message-manager": "14.1.0-preview-8c978cc75",
  "@metamask-previews/messenger": "0.3.0-preview-8c978cc75",
  "@metamask-previews/multichain-account-service": "7.0.0-preview-8c978cc75",
  "@metamask-previews/multichain-api-middleware": "1.2.7-preview-8c978cc75",
  "@metamask-previews/multichain-network-controller": "3.0.4-preview-8c978cc75",
  "@metamask-previews/multichain-transactions-controller": "7.0.1-preview-8c978cc75",
  "@metamask-previews/name-controller": "9.0.0-preview-8c978cc75",
  "@metamask-previews/network-controller": "30.0.0-preview-8c978cc75",
  "@metamask-previews/network-enablement-controller": "4.1.2-preview-8c978cc75",
  "@metamask-previews/notification-services-controller": "22.0.0-preview-8c978cc75",
  "@metamask-previews/permission-controller": "12.2.0-preview-8c978cc75",
  "@metamask-previews/permission-log-controller": "5.0.0-preview-8c978cc75",
  "@metamask-previews/perps-controller": "1.0.0-preview-8c978cc75",
  "@metamask-previews/phishing-controller": "16.3.0-preview-8c978cc75",
  "@metamask-previews/polling-controller": "16.0.3-preview-8c978cc75",
  "@metamask-previews/preferences-controller": "22.1.0-preview-8c978cc75",
  "@metamask-previews/profile-metrics-controller": "3.0.1-preview-8c978cc75",
  "@metamask-previews/profile-sync-controller": "27.1.0-preview-8c978cc75",
  "@metamask-previews/ramps-controller": "10.1.0-preview-8c978cc75",
  "@metamask-previews/rate-limit-controller": "7.0.0-preview-8c978cc75",
  "@metamask-previews/remote-feature-flag-controller": "4.1.0-preview-8c978cc75",
  "@metamask-previews/sample-controllers": "4.0.3-preview-8c978cc75",
  "@metamask-previews/seedless-onboarding-controller": "8.1.0-preview-8c978cc75",
  "@metamask-previews/selected-network-controller": "26.0.3-preview-8c978cc75",
  "@metamask-previews/shield-controller": "5.0.1-preview-8c978cc75",
  "@metamask-previews/signature-controller": "39.0.4-preview-8c978cc75",
  "@metamask-previews/storage-service": "1.0.0-preview-8c978cc75",
  "@metamask-previews/subscription-controller": "6.0.0-preview-8c978cc75",
  "@metamask-previews/transaction-controller": "62.19.0-preview-8c978cc75",
  "@metamask-previews/transaction-pay-controller": "16.2.0-preview-8c978cc75",
  "@metamask-previews/user-operation-controller": "41.0.3-preview-8c978cc75"
}

@ccharly
Copy link
Contributor Author

ccharly commented Mar 5, 2026

@metamaskbot publish-preview

Copy link

@cursor cursor bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes and found 1 potential issue.

Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, have a team admin enable autofix in the Cursor dashboard.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants